.\" Copyright (c) 2007-2011 Broadcom Corporation
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation.
.\"
.\" bnx2x.4,v 1.0
.\"
.TH BNX2X 4 "11/29/07" "Broadcom Corporation"
.\"
.\" NAME part
.\"
.SH NAME
bnx2x \- Broadcom NetXtreme II BCM57710/BCM57711/BCM57711E/BCM57712/BCM57712_MF/
BCM57800/BCM57800_MF/BCM57810/BCM57810_MF/BCM57840/BCM57840_MF 10Gb PCIE 
Ethernet Network Controllers and Broadcom NetXtreme II BCM57840 10Gb/20Gb PCIE
Ethernet Network Controllers.
.\"
.\" SYNOPSIS part
.\"
.SH SYNOPSIS
.B insmod bnx2x.ko 
.RB [int_mode=1]\c
.br
.B insmod bnx2x.ko
.RB [int_mode=2]\c
.br
.B insmod bnx2x.ko
.RB [disable_tpa=1]\c
.br
.B insmod bnx2x.ko
.RB [pri_map=0x22110000]\c
.br
.B insmod bnx2x.ko
.RB [dropless_fc=1]\c
.br
.B insmod bnx2x.ko
.RB [autogreeen=2]\c
.PP
.B modprobe bnx2x
.RB [int_mode=1]\c
.br
.B modprobe bnx2x
.RB [int_mode=2]\c
.br
.B modprobe bnx2x
.RB [disable_tpa=1]\c
.br
.B modprobe bnx2x
.RB [pri_map=0x22110000]\c
.br
.B modprobe bnx2x
.RB [dropless_fc=1\c]
.br
.B modprobe bnx2x
.RB [autogreeen=2]\c
.\"
.\" DESCRIPTION part
.\"
.SH DESCRIPTION
.I bnx2x
is the network device driver for the Broadcom
.B NetXtreme II BCM5771x/BCM578xx
series PCIE 10/20-Gigabit Ethernet Network Interface Card (NIC). The driver has
been tested on 2.6.x kernels starting from 2.6.9.
.PP
Refer to the README.TXT from the driver package on how to
compile and install the driver.
.PP
Refer to various Linux documentations
on how to configure network protocol and address.
.\"
.\" DRIVER DEPENDENCIES part
.\"
.SH DRIVER DEPENDENCIES
The driver uses library functions in the crc32 and zlib_inflate libraries.
On most kernels, these libraries are already built into the kernel. In
some cases, it may be necessary to load these library modules before the
driver or unresolved symbol errors will appear. Using modprobe will
resolve the dependencies automatically.

In rare cases where the crc32 and zlib_inflate libraries are not enabled
in the kernel, it will be necessary to compile the kernel again with the
libraries enabled.

The driver uses also library functions in the crc32c library. On new kernels,
this library is already built into the kernel. In some old kernels,
it may be necessary to load this library module before the driver or
unresolved symbol errors will appear. Using modprobe will resolve the
dependencies automatically.

On systems where GRO feature is available, driver uses functions from 8021q
library. In some kernels this library is already built into the kernel, in
others it may be necessary to load this library module before the driver or
unresolved symbol errors will appear. Using modprobe will resolve the
dependencies automatically.

.\"
.\" DRIVER SETTINGS part
.\"
.SH DRIVER SETTINGS
The bnx2x driver settings can be queried and changed using \fBethtool\fP.
The latest ethtool can be downloaded from
\fBhttp://sourceforge.net/projects/gkernel\fP if it is not already installed.
See the ethtool man page for more information. ethtool settings
do not persist across reboot or module reload. The ethtool commands can be
put in a startup script such as /etc/rc.local to preserve the settings
across a reboot. On Red Hat distributions, "ethtool -s" parameters can be
specified in the ifcfg-ethx scripts using the ETHTOOL_OPTS keyword. The
specified ethtool parameters will be set during ifup. Example:
/etc/sysconfig/network-scripts/ifcfg-eth0:

ETHTOOL_OPTS="wol g speed 100 duplex half autoneg off"

.\"
.\" PARAMETER part
.\"
.SH PARAMETERS
Several optional parameters can be supplied as a command line argument
to the insmod or modprobe command. These parameters can also be set in
modprobe.conf. See the man page for more information.
.PP
The optional parameter \fBint_mode\fP is used to force using an interrupt mode
other than MSI-X. By default, the driver will try to enable MSI-X if it is
supported by the kernel. In case MSI-X is not attainable, the driver will try
to enable MSI if it is supported by the kernel. In case MSI is not attainable,
the driver will use legacy INTx mode. In some old kernels, it's impossible to
use MSI if device has used MSI-X before and impossible to use MSI-X if device
has used MSI before, in these cases system reboot in between is required.
.PP
Set the \fBint_mode\fP parameter to 1 as shown below to force using the legacy
INTx mode on all NetXtreme II NICs in the system.
.PP
insmod bnx2x.ko int_mode=1
.PP
or
.PP
modprobe bnx2x int_mode=1
.PP
Set the \fBint_mode\fP parameter to 2 as shown below to force using MSI mode
on all NetXtreme II NICs in the system.
.PP
insmod bnx2x.ko int_mode=2
.PP
or
.PP
modprobe bnx2x int_mode=2
.PP
The optional parameter \fBdisable_tpa\fP can be used to disable the
Transparent Packet Aggregation (TPA) feature. By default, the driver will
aggregate TCP packets, but if a user would like to disable this advanced
feature - it can be done.
.PP
Set the \fBdisable_tpa\fP parameter to 1 as shown below to disable the TPA
feature on all NetXtreme II NICs in the system.
.PP
insmod bnx2x.ko disable_tpa=1
.PP
or
.PP
modprobe bnx2x disable_tpa=1
.PP
Use ethtool (if available) to disable TPA (LRO) for a specific NetXtreme II NIC.
.PP
The optional parameter \fBpri_map\fP is used to map the skb-priority to a Class
Of Service (CoS) in the HW. This 32 bit parameter is evaluated by the driver 
as 8 values of 4 bits each. Each nibble sets the desired HW queue number for 
that priority.
.PP
This parameter is only available in kernels which support mapping skb priorities
to traffic classes and traffic classes to transmission queues. This means kernel
2.6.39 or newer.
.br
Also:
.br
on the 5771x family this feature is unavailable (a single COS services all).
.br
on the 57712 family two classes of service are available.
.br
on the 578xx family three classes of service are availabe.
.br
configuring priorities to unavailable COSs will log an error and default to 
COS 0.
.br

.PP
For example, set the \fBpri_map\fP parameter to 0x22221100 to map priority 0
and 1 to CoS 0, map priority 2 and 3 to CoS 1, and map priority 4 to 7 to CoS 2.
Another example, set the \fBpri_map\fP parameter to 0x11110000 to map priority
0 to 3 to CoS 0, and map priority 4 to 7 to CoS 1.
.PP
The optional parameter \fBdropless_fc\fP can be used to enable a complementary
flow control mechanism on 57711 or 57711E. The default flow control mechanism
is to send pause frames when the on chip buffer (BRB) is reaching a certain
level of occupancy. This is a performance targeted flow control mechanism.
On 57711 or 57711E, one can enable another flow control mechanism to send pause
frames in case where one of the host buffers (when in RSS mode) are exhausted.
This is a "zero packet drop" targeted flow control mechanism.
.PP
Set the \fBdropless_fc\fP parameter to 1 as shown below to enable the dropless
flow control mechanism feature on all 57711 or 57711E NetXtreme II NICs in the
system.
.PP
insmod bnx2x.ko dropless_fc=1
.PP
or
.PP
modprobe bnx2x dropless_fc=1
.PP
The optional parameter \fBautogreeen\fP can be used to force specific AutoGrEEEN
behavior. By default, the driver will use the nvram settings per port, but if
the module parameter is set, it can override the nvram settings to force
AutoGrEEEN to either active (1) or inactive (2). The default value of 0 to use
the nvram settings.
.PP
There are some more optional parameters that can be supplied as a command line
argument to the insmod or modprobe command. These optional parameters are
mainly to be used for debug and may be used only by an expert user.
.PP
The debug optional parameter \fBpoll\fP can be used for timer based polling.
Set the \fBpoll\fP parameter to the timer polling interval on all NetXtreme
II NICs in the system.
.PP
The debug optional parameter \fBmrrs\fP can be used to override the MRRS
(Maximum Read Request Size) value of the HW. Set the \fBmrrs\fP parameter to
the desired value (0..3) for on all NetXtreme II NICs in the system.
.PP
The debug optional parameter \fBdebug\fP can be used to set the default
msglevel on all NetXtreme II NICs in the system. Use \fBethtool -s\fP to set
the msglevel for a specific NetXtreme II NIC.
.PP
.\"
.\" DEFAULT SETTINGS part
.\"
.SH DEFAULT SETTINGS
.TP
Speed :
Autonegotiation with all speeds advertised
.TP
Flow control :
Autonegotiation with rx and tx advertised
.TP
MTU :
1500 (range 46 - 9000)
.TP
Rx Ring size :
4078 (range 0 - 4078)
.TP
Tx Ring size :
4078 (range (MAX_SKB_FRAGS+4) - 4078)

MAX_SKB_FRAGS varies on different kernels and
different architectures. On a 2.6 kernel for
x86, MAX_SKB_FRAGS is 18.
.TP
Coalesce rx usecs :
25 (range 0 - 3000)
.TP
Coalesce tx usecs :
50 (range 0 - 12288)
.TP
MSI-X :
Enabled (if supported by 2.6 kernel)
.TP
TSO :
Enabled
.TP
WoL :
Disabled
.\"
.\" DUAL MEDIA SUPPORT part
.\"
.SH DUAL MEDIA SUPPORT
A dual media capable system connects two PHYs to a single MAC. These PHYs
generally use different media types (for example SFP+ fiber and 10GBase-T
twisted pair copper) and the dual media configuration requires that the user
select a preference among the two PHYs. Supported preferences include manual
selection and PHY priority selection. With manual selection, the user specifies
that only one PHY should be configured and use to connect to the network. (For
example, use the fiber PHY only, always ignore the copper PHY.) With PHY
priority selection, the user specifies that either PHY may be used to connect
to the network, but when both PHYs indicate link, the PHY with the higher
priority will be used to connect to the network. (For example, with fiber PHY
priority, if either the copper PHY or the fiber PHY has link, that PHY will be
used to connect to the network. However, if both the fiber and copper PHYs have
link, the fiber PHY will be used to connect to the network and the copper PHY
will be ignored.) When PHY priority selection is used, the PHY which has been
selected for network connectivity is referred to as the active PHY. When PHY
manual selection is used, there are no special considerations when running
ethtool since only one media type is used by the MAC and ethtool is able to
control that media type as expected. However, since ethtool is currently not
designed to manage the multiple physical interfaces enabled by Dual Media
support,  the following limitations will apply when ethtool is used on a system
with PHY priority selection enabled:

1. Ethtool can be used to display the current physical media information for
the active PHY.

2. Ethtool cannot be used to determine whether PHY manual selection or PHY
priority selection is in use. This configuration information is available
through system specific utilities provided by the vendor.

3. Ethtool can be used to control the current  physical media configuration,
but this will force the configuration back to PHY manual selection.

4. When ethtool is used to configure the active PHY, ethtool must be called
twice, first to change AWAY from the active PHY, then to change BACK to the
active PHY. (For example, if the active PHY is copper, ethtool must be first
called to change the active PHY to fiber, forcing PHY manual selection
to be enabled, then ethtool must be called again to change the active PHY
to copper.)

5. Using ethtool to change from PHY priority selection to PHY manual selection
only applies to the current session. When the driver is unloaded/reloaded or
the system is rebooted, PHY selection will return to the default value.
PHY selection defaults must be set outside of Linux with system specific
utilities provided by the vendor.

.\"
.\" AUTHOR part
.\"
.SH AUTHOR
Eliezer Tamir \- eliezert@broadcom.com
.\"
.\" SEE ALSO part
.\"
.SH SEE ALSO
.BR ifconfig (8),
.BR insmod (8),
.BR modprobe.conf (5),
.BR ethtool (8).

